home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 1 / LSD Compendium Deluxe 1.iso / a / programming / assembly / angint4.s.lha / intro1.s < prev    next >
Encoding:
Text File  |  1980-02-15  |  34.2 KB  |  1,586 lines

  1. ;Intro coded by Corto in 1990
  2. ;Hello to all Angels members !
  3. ;This source code is only for Angels members !!! 
  4.  
  5. ;'Ltext:' pour aller au texte
  6. ;pour tester: 'A'   'jrun'
  7. ;sauvegarde: 'WI' 'filename' 'RUN' 'END'
  8. ;'L***' pour voir les commentaires
  9.  
  10. org $40000
  11. load $40000
  12. run:
  13. movem.L d0-d7/a0-a6,-(sp)
  14. bsr.L save_all
  15. lea sinus,a1
  16. lea sin,a0
  17. move #1023,d7
  18. run1:
  19. move (a0)+,d0
  20. muls #44,d0
  21. divs #$400,d0
  22. muls #44,d0
  23. ext.l d0
  24. move.L d0,(a1)+
  25. dbra d7,run1
  26.  
  27. rn7:lea $50000,a0
  28. move #20607,d7
  29. run01:
  30. clr.l (a0)+
  31. dbra d7,run01
  32. bsr.L rectifzoom
  33. bsr.L makecopper
  34. lea $dff000,a6
  35. move #$3fff,$9a(a6)
  36. move #$c000,$9a(a6)
  37. move #$3fff,$96(a6)
  38. move #$83e0,$96(a6)
  39. move.L #$3d7921c9,$8e(a6)
  40. move.l #$3000d8,$92(a6)
  41. move.L #copperlist,$80(a6)
  42. clr $88(a6)
  43. bsr.L init_music
  44. lea $6ff800,a6
  45. lea copspr+2,a0
  46. move.L #set1,d0
  47. bsr.s is
  48. move.l #set2,d0
  49. bsr.s is
  50. move.l #set3,d0
  51. bsr.s is
  52. move.l #set4,d0
  53. bsr.s is
  54. move.l #set5,d0
  55. bsr.s is
  56. move.l #set6,d0
  57. bsr.s is
  58. move.l #setf,d0
  59. bsr.s is
  60. move.l #setf,d0
  61. bsr.s is
  62. clr.b set6-7
  63. add.l a6,a6
  64. move.L #%111101111011100111101111,$4f800+38
  65. move.L #%100001001010100011001001,$4f800+44+38
  66. move.L #%100001001011100011001001,$4f800+88+38
  67. move.l #%100001001010010011001001,$4f800+132+38
  68. move.l #%111101111010010011001111,$4f800+176+38
  69. bra.s wait
  70. is:
  71. move d0,4(a0)
  72. swap d0
  73. move d0,(a0)
  74. addq.l #8,a0
  75. rts
  76.  
  77. wait:
  78. cmpi.b #1,6(a6)
  79. bne.s wait
  80. tst.B 5(a6)
  81. bne.s wait
  82. move.L bpw,d0
  83. move.L bpa,bpw
  84. move.l d0,bpa
  85. subi.l #size2,d0
  86. move d0,copbpl1+6
  87. swap d0
  88. move d0,copbpl1+2
  89. swap d0
  90. addi.L #88,d0
  91. move d0,copbpl1+14
  92. swap d0
  93. move d0,copbpl1+10
  94.  
  95. move #-1,bready
  96. bsr.L clear
  97.  
  98. move.L bpw1,d0    ;3D
  99. move.L bpa1,bpw1
  100. move.l d0,bpa1
  101. move d0,copbpl2+6
  102. swap d0
  103. move d0,copbpl2+2
  104.  
  105. move.b delai,d0
  106. add.b d0,wait1
  107. tst.b wait1
  108. bne.s irq1
  109. bsr.L print
  110. irq1:
  111. bsr.L stars
  112. bsr.L calcule
  113. bsr.L play
  114. lea $dff000,a6
  115. bsr.L color
  116. move #$8400,$96(a6)
  117. brdy:tst bready
  118. bne.s brdy
  119. move #$400,$96(a6)
  120.  
  121. bsr.L sinuscroll
  122. bsr.L draw
  123. move #$8400,$96(a6)
  124. wbl12:btst #6,2(a6)
  125. bne.s wbl12
  126. move #$400,$96(a6)
  127.  
  128. btst #6,$bfe001
  129. bne.L wait
  130. bsr.L end_music
  131. bsr.L restore_all
  132. movem.L (sp)+,d0-d7/a0-a6
  133. rts
  134. wait1:dc.b 0
  135. delai:dc.b $40
  136. delai5:dc.b 0
  137. even
  138. delai2:dc.l $c9f00000
  139. speedtable:dc.W $10f9,$20e9,$40c9,$8089
  140. bready:dc.w -1
  141.  
  142. clea:move.L a6,-(a7)
  143. move sr,-(a7)
  144. lea $dff000,a6
  145. move #$40,$9c(a6)
  146. move #$8400,$96(a6)
  147. clea1:btst #$6,2(a6)
  148. bne.s clea1
  149. move #$400,$96(a6)
  150. move #20+0,$66(a6)
  151. move.l #bpd+256,$54(a6)
  152. move.L #$1000000,$40(a6)
  153. move.L #intend,$6c
  154. move #13974,$58(a6)
  155. move (a7)+,sr
  156. move.L (a7)+,a6
  157. rte
  158.  
  159. intend:move sr,-(a7)
  160. move #$40,$dff09c
  161. move #$3fff,$dff09a
  162. move #$c000,$dff09a
  163. clr bready
  164. move (a7)+,sr
  165. rte
  166.  
  167. fill:movem.L d0/a6,-(a7)
  168. move sr,-(a7)
  169. lea $dff000,a6
  170. move #$40,$9c(a6)
  171. move.l bpw1,d0
  172. addi.l #13952+42,d0
  173. move.l #$140014,$64(a6)
  174. move.l #bpd+13952+42,$50(a6)
  175. move.L d0,$54(a6)
  176. move.L #$9f00012,$40(a6)
  177. move.l #cycle,$6c
  178. move #13974,$58(a6)
  179. move (a7)+,sr
  180. movem.L (a7)+,d0/a6
  181. rte
  182.  
  183. rectifzoom:
  184. lea angels2,a2
  185. recl1:move (a2),d0
  186. ext.l d0
  187. lsl.l #8,d0
  188. divs #176,d0
  189. move d0,(a2)+
  190. cmpi #$7777,(a2)
  191. bne.s recl1
  192. lea angels2,a2
  193. recl2:
  194. move #1200,4(a2)
  195. addq.l #6,a2
  196. cmpi #$7777,(a2)
  197. bne.s recl2
  198. rts
  199.  
  200. cols:dc.w -1
  201. color:move y+2,d0
  202. and #$780,d0
  203. cmp y+2,d0
  204. bne.s color1
  205. lea col3d+2,a0
  206. tst cols
  207. bmi.s color2
  208. add #$101,(a0)
  209. cmpi #$1010,(a0)
  210. bne.s color1
  211. move #-1,cols
  212. move #$f0f,(a0)
  213. rts
  214. color2:sub #$101,(a0)
  215. cmpi #$707,(a0)
  216. bne.s color1
  217. clr cols
  218. move #$808,(a0)
  219. color1:rts
  220.  
  221. calcule:
  222. addi #32,y+2
  223. andi #$7fe,y+2
  224. cmpi #$400,y+2
  225. beq.s calc1
  226. tst y+2
  227. bne.s calcs
  228. clr prio+2
  229. bra.s calcs
  230. calc1:move #$40,prio+2
  231. calcs:lea sin,a0
  232. lea cos,a1
  233. lea angels2,a2
  234. lea coord,a3
  235. calculoop:
  236. movem.w (a2)+,d0/d1/d2
  237. move d0,d5
  238. move d1,d6
  239. x:move #$200,d3
  240. muls (a0,d3),d0    
  241. muls (a1,d3),d1
  242. sub.l d1,d0
  243. muls (a1,d3),d5
  244. move d6,d1
  245. muls (a0,d3),d1
  246. add.l d5,d1
  247. asr.l #8,d0
  248. asr.l #2,d0
  249. asr.l #8,d1
  250. asr.l #2,d1
  251. y:move #$600,d3
  252. move d1,d5
  253. move d2,d6
  254. muls (a0,d3),d1
  255. muls (a1,d3),d2
  256. sub.l d2,d1
  257. muls (a1,d3),d5
  258. move d6,d2
  259. muls (a0,d3),d2
  260. add.l d5,d2
  261. asr.l #2,d1
  262. asr.l #8,d2
  263. asr.l #2,d2
  264. z:move #$200,d3
  265. move d2,d5
  266. move d0,d6
  267. muls (a0,d3),d2
  268. muls (a1,d3),d0
  269. sub.l d0,d2
  270. muls (a1,d3),d5
  271. move d6,d0
  272. muls (a0,d3),d0
  273. add.l d5,d0
  274. asr.l #2,d0
  275. asr.l #8,d2
  276. asr.l #6,d2
  277.  
  278. addi #300,d2
  279. divs d2,d0
  280. divs d2,d1
  281. addi #[44*64],d0
  282. addi #[111*16],d1
  283. move d0,(a3)+
  284. move d1,(a3)+
  285. cmpi #$7777,(a2)
  286. bne.L calculoop
  287. rts
  288.  
  289. draw:
  290. lea coord,a3
  291. lea angels2l,a4
  292. movem.L vide,d0-d7
  293. move #$8400,$96(a6)
  294. wbbl:btst #$e,2(a6)
  295. bne.s wbbl
  296. move #$400,$96(a6)
  297. move.l #$ffff8000,$72(a6)
  298. move #-1,$44(a6)
  299. move.w #64,$60(a6)
  300. move.w #64,$66(a6)
  301. drawloop1:
  302. Lea bpd,a1
  303. clr.l d0
  304. clr.l d2
  305. move.b (a4)+,d0
  306. move.b (a4)+,d2
  307. lsl.w #2,d0
  308. lsl.w #2,d2
  309. move 2(a3,d0.w),d1
  310. move (a3,d0.w),d0
  311. move 2(a3,d2.w),d3
  312. move (a3,d2.w),d2
  313. asr #4,d0
  314. asr #4,d1
  315. asr #4,d2
  316. asr #4,d3
  317. cmp d1,d3
  318. beq.s draw5
  319. bsr.s drawline
  320. draw5:
  321. cmpi.B #$77,(a4)
  322. bne.s drawloop1
  323. rts
  324.  
  325. ymax:dc.w $d9
  326. ymin:dc.W 5
  327. ymax2:dc.w $d9
  328. ymin2:dc.w 5
  329.  
  330. drawline:
  331. cmp d1,d3
  332. bhi.s line1
  333. exg d0,d2
  334. exg d1,d3
  335. line1:
  336. sub d1,d3
  337. sub d0,d2
  338. bpl.s line2
  339. neg d2
  340. moveq #11,d4
  341. cmp d3,d2
  342. bcs.s line3
  343. moveq #23,d4
  344. exg d2,d3
  345. bra.s line3
  346. line2:moveq #3,d4
  347. cmp d3,d2
  348. bcs.s line3
  349. moveq #19,d4
  350. exg d2,d3
  351. line3:
  352. add d2,d2
  353. move d2,d5
  354. sub d3,d5
  355. cmp d2,d3
  356. bcs.s line4
  357. bset #6,d4
  358. line4:lsl #6,d1
  359. add.L d1,a1
  360. move d0,d1
  361. lsr #4,d1
  362. add d1,d1
  363. add d1,a1
  364. and #$f,d0
  365. add d0,d0
  366. move table_points(pc,d0.w),d1
  367. lsl.b #3,d0
  368. move.b #$b,con1+2
  369. or.b d0,con1+2
  370. move #$8400,$96(a6)
  371. wbl10:btst #6,2(a6)
  372. bne.s wbl10
  373. move #$400,$96(a6)
  374. eor d1,(a1)
  375. move.l a1,$48(a6)
  376. move.l a1,$54(a6)
  377. move d5,$52(a6)
  378. sub d3,d5
  379. move d5,$64(a6)
  380. move d2,$62(a6)
  381. move d4,$42(a6)
  382. con1:move #$b5a,$40(a6)
  383. addq.w #1,d3
  384. lsl #6,d3
  385. addq.w #2,d3
  386. move d3,$58(a6)
  387. rts
  388. table_points:dc.w $8000,$4000,$2000,$1000,$800,$400,$200,$100,$80
  389. dc.w $40,$20,$10,8,4,2,1
  390. angels2:
  391. dc.W -1500,-300,0,-1200,300,0,-1000,300,0,-800,100,0
  392. dc.W -800,300,0,-600,300,0,-600,-300,0,-1000,100,0
  393. dc.W -1000,-300,0,-1300,-150,0,-1200,-150,0,-1200,50,0
  394.  
  395. dc.w -500,-300,0,-500,300,0,500,300,0,200,200,0,200,100,0
  396. dc.W 300,100,0,300,0,0,200,0,0,200,-150,0,500,-150,0
  397. dc.W 500,-300,0,0,-300,0,0,200,0,-350,200,0
  398. dc.w -350,-200,0,-200,-200,0,-300,0,0,-100,0,0,-100,-300,0
  399.  
  400. dc.w 600,-300,0,600,300,0,800,300,0,800,-200,0
  401. dc.w 1200,-200,0,900,300,0,1400,300,0,1100,200,0,1400,-300,0
  402. dc.w $7777
  403.  
  404. angels2l:dc.B 0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,0
  405. dc.b 9,10,10,11,11,9
  406. dc.b 12,13,13,14,14,15,15,16,16,17,17,18,18,19,19,20,20,21,21
  407. dc.b 22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,30,30,12
  408.  
  409. dc.B 31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,31
  410. dc.w $7777
  411.  
  412. bpa1:dc.L bp3
  413. bpw1:dc.L bp4
  414.  
  415. stars:
  416. lea set5+1,a0
  417. move #15-1,d7
  418. spriteloop:
  419. add.B #5,(a0)
  420. add.l #8,a0
  421. dbra d7,spriteloop
  422. lea set6+1,a0
  423. move #15,d7
  424. spriteloopa:
  425. add.B #6,(a0)
  426. add.l #8,a0
  427. dbra d7,spriteloopa
  428. lea set3+1,a0
  429. move #21,d7
  430. spriteloop2:
  431. add.b #3,(a0)
  432. add.l #8,a0
  433. dbra d7,spriteloop2
  434. lea set4+1,a0
  435. move #21,d7
  436. sprite2loopa:
  437. add.B #4,(a0)
  438. add.L #8,a0
  439. dbra d7,sprite2loopa
  440. lea set1+1,a0
  441. move #31,d7
  442. spriteloop3:
  443. add.b #1,(a0)
  444. add.l #8,a0
  445. dbra d7,spriteloop3
  446. lea set2+1,a0
  447. move #31,d7
  448. spriteloop3a:
  449. add.b #2,(a0)
  450. add.l #8,a0
  451. dbra d7,spriteloop3a
  452. rts
  453.  
  454. ;***
  455. ;pour le scrolltext: 4 vitesses (a,b,c,d) - 'z' pour le stopper
  456. ;0=fini !
  457.  
  458. text:
  459. dc.b "b    --- ANGELS ---    z";centrĂ© pour 22 caracteres affichables
  460. DC.B "PRESENT A NEW COOL CRACK... "
  461. DC.B "cGREETINGS TO ALL OUR FRIENDS AND CONTACTS !       "
  462. DC.B "bINTRO CODED BY CORTO !          ",0
  463. even
  464. textptr:dc.l text
  465.  
  466. clear:
  467. clr $66(a6)
  468. move.l #-1,$44(a6)
  469. move.l bpw,$54(a6)
  470. move.L #$1000000,$40(a6)
  471. move.l #fill,$6c
  472. move #$40,$9c(a6)
  473. move #$c040,$9a(a6)
  474. move #7190,$58(a6)
  475. rts
  476.  
  477. sinuscroll:move #$8400,$96(a6)
  478. wab:btst #6,2(a6)
  479. bne.s wab
  480. move.L #$dfc0000,$40(a6)
  481. move #42,$62(a6)
  482. move #44,$64(a6)
  483. move #42,$66(a6)
  484. move #-1,$46(a6)
  485. move.l bpw,d5
  486. addi.L #2112,d5
  487. move #$f000,d6
  488. clr.L d3
  489. move.L sinusc,a5
  490. subi.l #32,a5
  491. cmpi.L #sinus-32,a5
  492. bne.s sinc1
  493. lea sinusf-32,a5
  494. sinc1:move.L a5,sinusc
  495. move #87,d7
  496. move.l #scroll,d4
  497. sinscri:move.L (a5),d2
  498. addi.L #16,a5
  499. cmpi.L #sinusf,a5
  500. bne.s sinloop2
  501. lea sinus,a5
  502. sinloop2:
  503. add.l d5,d2
  504. move #$8400,$96(a6)
  505. wbl:btst #6,2(a6)
  506. bne.s wbl
  507. move #$400,$96(a6)
  508. move.L d4,$50(a6)
  509. move.l d2,$4c(a6)
  510. move.L d2,$54(a6)
  511. move d6,$44(a6)
  512. move #1025,$58(a6)
  513. lsr #4,d6
  514. tst d6
  515. bne.s sinloop1
  516. move #$f000,d6
  517. addq.L #2,d4
  518. addq.L #2,d5
  519. sinloop1:
  520. dbra d7,sinscri
  521. move #$8400,$96(a6)
  522. sinscrend:
  523. btst #6,2(a6)
  524. bne.s sinscrend
  525. move #$400,$96(a6)
  526. rts
  527.  
  528. sinusc:dc.l sinus+2048
  529.  
  530. print:
  531. tst.b delai5
  532. bne.s printoff
  533. clr.l d0
  534. move.l textptr,a0
  535. move.b (a0)+,d0
  536. tst.b d0
  537. beq.s fini
  538. move.l a0,textptr
  539. cmpi.b #$60,d0
  540. bcc.s spechg
  541. sub.b #$20,d0
  542. lsl.b #1,d0
  543. add.l #fonte,d0
  544. move.l d0,a0
  545. lea scroll+44,a1
  546. move #15,d7
  547. print1:
  548. move (a0)+,(a1)+
  549. addi.L #118,a0
  550. addi.l #44,a1
  551. dbra d7,print1
  552. printoff:rts
  553. fini:
  554. move.l #text,textptr
  555. bra.s print
  556. spechg:
  557. cmpi.b #"z",d0
  558. beq.s spechg1
  559. sub #$61,d0
  560. lsl #1,d0
  561. lea speedtable,a0
  562. move (a0,d0.w),d0
  563. move.b d0,delai2
  564. lsr #8,d0
  565. move.b d0,delai
  566. clr.b wait1
  567. bra.L print
  568.  
  569. spechg1:move.b #-1,delai5
  570. bra.L print
  571. clr.b d0
  572. sub.B delai,d0
  573. move.b d0,wait1
  574. rts
  575.  
  576. cycle:move sr,-(a7)
  577. tst.b delai5
  578. bne.s cycle1
  579. move #$40,$dff09c
  580. move.l #scroll-2,$dff054
  581. move.l #scroll,$dff050
  582. move.l delai2,$dff040
  583. move.l #$ffffffff,$dff044
  584. clr.l $dff064
  585. move.L #clea,$6c
  586. move.w #1048,$dff058
  587. move (a7)+,sr
  588. rte
  589. cycle1:subq.b #1,delai5
  590. move (a7)+,sr
  591. bra.L clea
  592. fonte:
  593. dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  594. dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  595. dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  596. dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  597. dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  598. dc.l $000003E0,$0E380000,$03800004,$000001C0,$00F80F80,$008003C0
  599. dc.l $00000000,$00000008,$00000000,$00000000,$00000000,$00000000
  600. dc.l $00000000,$00000000,$00000000,$00000FF0,$00000000,$00000000
  601. dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  602. dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  603. dc.l $000003E0,$1F7C0000,$03801C0E,$0FF003E0,$01F007C0,$008003C0
  604. dc.l $00000000,$0000001C,$0FF00180,$0FF03FF8,$781E7FFE,$0FF07FF0
  605. dc.l $0FF007F0,$00000000,$00000000,$00003FFC,$00000FF0,$7FF00FF0
  606. dc.l $7FF00FFE,$0FFE0FF0,$781E3FFC,$001E781E,$78007C3E,$7FF00FF0
  607. dc.l $7FF00FF0,$7FF00FFE,$7FF8781E,$781E781E,$781E7878,$7FFE0000
  608. dc.l $000003E0,$1F7C0000,$1FF03E1F,$3FFC03E0,$03E003E0,$01C003C0
  609. dc.l $00000000,$0000003E,$3FFC0780,$3FFC3FFE,$781E7FFE,$3FFC7FFC
  610. dc.l $3FFC3FFC,$01C001C0,$00000000,$00003FFC,$00003FFC,$7FFC3FFC
  611. dc.l $7FFC3FFE,$3FFE3FFC,$781E3FFC,$001E783E,$78007E7E,$7FFC3FFC
  612. dc.l $7FFC3FFC,$7FFC3FFE,$7FF8781E,$781E781E,$781E7878,$7FFE0000
  613. dc.l $000003E0,$1F7C0080,$3FF83E3E,$3C3C03E0,$03E003E0,$01C003C0
  614. dc.l $00000000,$0000007F,$3C3C1F80,$3C3C001E,$781E7800,$3C3C7FFC
  615. dc.l $3C3C3C3C,$03E003E0,$00007FFF,$00007FFE,$00003C3C,$783C3C3C
  616. dc.l $783C3C00,$3C003C3C,$781E03C0,$001E787C,$78007FFE,$783C3C3C
  617. dc.l $783C3C3C,$783C3C00,$0780781E,$781E781E,$7C3E7878,$001E0000
  618. dc.l $000003E0,$0F3C0140,$3FF83E7C,$781E01E0,$07C001F0,$03E003C0
  619. dc.l $00000000,$000000FE,$781E0780,$781E000F,$781E7800,$781E7FFE
  620. dc.l $781E781E,$03E003E0,$00007FFF,$0000783E,$0000781E,$781E781E
  621. dc.l $781E7800,$7800781E,$781E03C0,$001E78F8,$78007BDE,$781E781E
  622. dc.l $781E781E,$781E7800,$0780781E,$781E781E,$3C3C7878,$001E0000
  623. dc.l $000003E0,$06180220,$3B801CF8,$781E00C0,$07C001F0,$7FFF03C0
  624. dc.l $00007FFF,$000001FC,$781E0780,$001E000F,$781E7800,$7800003E
  625. dc.l $781E781E,$03E003E0,$00007FFF,$0000003C,$0000781E,$781E781E
  626. dc.l $781E7800,$7800781E,$781E03C0,$001E79F0,$7800799E,$781E781E
  627. dc.l $781E781E,$781E7800,$0780781E,$781E781E,$3E7C7878,$001E0000
  628. dc.l $000003E0,$0C3007F0,$3FF001F0,$7C3E0180,$07C001F0,$3FFE7FFF
  629. dc.l $00007FFF,$000003F8,$781E0780,$003C001F,$781E7800,$7C00001E
  630. dc.l $7C3E3C3E,$01C001C0,$00007FFF,$0000007C,$0000781E,$783E781E
  631. dc.l $781E7800,$78007800,$781E03C0,$001E7BE0,$7800781E,$781E781E
  632. dc.l $783C781E,$783C3C00,$0780781E,$781E781E,$1FF87CF8,$003C0000
  633. dc.l $000003E0,$00000A28,$3FF803E0,$3FFC0000,$07C001F0,$1FFC7FFF
  634. dc.l $00007FFF,$000007F0,$7C1E0780,$0FFC03FE,$7FFE7FF0,$7FF0001E
  635. dc.l $3FFC3FFE,$00000000,$00000000,$000001F8,$00007FFE,$7FFC7C00
  636. dc.l $7C1E7FE0,$7FE07C7E,$7FFE07C0,$003E7FF0,$7C007C1E,$7C1E7C1E
  637. dc.l $7FFC7C1E,$7FFC3FF0,$0F807C1E,$7C3E799E,$0FF03FF0,$0FFC0000
  638. dc.l $000003E0,$00001144,$1FF807C0,$3FFC0000,$07C001F0,$0FF87FFF
  639. dc.l $01C07FFF,$00000FE0,$7E1E0780,$3FF003FE,$7FFE7FFC,$7FFC003E
  640. dc.l $3FFC0FFE,$01C001C0,$00007FFF,$000003E0,$00007FFE,$7FFC7E00
  641. dc.l $7E1E7FE0,$7FE07E7E,$7FFE0FC0,$007E7FF0,$7E007E1E,$7E1E7E1E
  642. dc.l $7FF07E1E,$7FF80FFC,$1F807E1E,$3E7C7BDE,$1FF83FF0,$3FF00000
  643. dc.l $00000000,$00003FFE,$03B80F9C,$781E0000,$07C001F0,$0FF87FFF
  644. dc.l $03E00000,$00001FC0,$7E1E0780,$3E00003F,$007E007C,$783C007E
  645. dc.l $781E001E,$03E003E0,$00007FFF,$000003C0,$00007E1E,$7E1E7E1E
  646. dc.l $7E1E7E00,$7E007E1E,$7E1E0FC0,$787E7EF8,$7E007E1E,$7E1E7E1E
  647. dc.l $7E007E1E,$7E3C003C,$1F807E1E,$3FFC7FFE,$3FFC1FE0,$3E000000
  648. dc.l $000001C0,$00000000,$3FF81F3E,$781E0000,$07C001F0,$1FFC03C0
  649. dc.l $03E00000,$01C03F80,$7E3E0780,$7C00003F,$007E003E,$783E007E
  650. dc.l $781E783E,$03E003E0,$00007FFF,$00000000,$00007E1E,$7E1E7E3E
  651. dc.l $7E3E7E00,$7E007E3E,$7E1E0FC0,$7E7E7EF8,$7E007E1E,$7E1E7E3E
  652. dc.l $7E007E3E,$7E1E003E,$1F807E3E,$1FF87FFE,$3FFC0780,$7C000000
  653. dc.l $000003E0,$00000000,$3FF83E3E,$7FFE0000,$03E003E0,$1E3C03C0
  654. dc.l $03E00000,$03E07F00,$7FFE7FF8,$7FFE3FFF,$007E7FFE,$7FFE007E
  655. dc.l $7FFE7FFE,$03E003E0,$00007FFF,$00000180,$00007E1E,$7FFE7FFE
  656. dc.l $7FFE7FFE,$7E007FFE,$7E1E3FFC,$7FFE7E7C,$7FFE7E1E,$7E1E7FFE
  657. dc.l $7E007FFE,$7E1E7FFE,$1F807FFE,$0FF07FFE,$7E7E0780,$7FFE0000
  658. dc.l $000003E0,$00000000,$1FF07C3E,$3FFF0000,$03E003E0,$380E03C0
  659. dc.l $01E00000,$03E03E00,$3FFC7FF8,$7FFE3FFE,$007E7FFC,$3FFC007E
  660. dc.l $3FFC3FFC,$01C001E0,$00000000,$000003C0,$00007E1E,$7FFC3FFC
  661. dc.l $7FFC3FFE,$7E003FFC,$7E1E3FFC,$3FFC7E7C,$3FFE7E1E,$7E1E3FFC
  662. dc.l $7E003FF8,$7E1E7FFC,$1F803FFC,$07E07FFE,$7E7E0780,$7FFE0000
  663. dc.l $000003E0,$00000000,$0380381C,$3FFE0000,$01F007C0,$200203C0
  664. dc.l $00C00000,$03E01C00,$3FFC7FF8,$7FFE3FFE,$007E7FFC,$3FFC007E
  665. dc.l $3FFC3FFC,$000000C0,$00000000,$000003C0,$00007E1E,$7FFC3FFC
  666. dc.l $7FFC3FFE,$7E003FFC,$7E1E3FFC,$3FFC7E3E,$3FFE7E1E,$7E1E3FFC
  667. dc.l $7E003FFE,$7E1E7FFC,$1F803FFC,$03C07E7E,$7C3E0780,$7FFE0000
  668. dc.l $000001C0,$00000000,$03801000,$0FF40000,$00F80F80,$000003C0
  669. dc.l $01800000,$01C00800,$0FF07FF8,$7FFE3FF8,$007E7FF0,$0FF0007E
  670. dc.l $0FF00FF0,$00000180,$00000000,$00000180,$00007E1E,$7FF00FF0
  671. dc.l $7FF00FFE,$7E000FF0,$7E1E3FFC,$0FF07E3E,$0FFE7E1E,$7E1E0FF0
  672. dc.l $7E000FE6,$7E1E7FF0,$1F800FF0,$01807C3E,$7C3E0780,$7FFE0000
  673.  
  674. save_all:
  675. move.L 4,a6
  676. jsr -132(a6)
  677. move.b #%10000111,$bfd100
  678. move.l $6c,save_vecteur_irq
  679. move.w $dff01c,save_intena
  680. or.w #$c000,save_intena
  681. move.w $dff002,save_dmacon
  682. or.w #$8100,save_dmacon
  683. rts
  684. restore_all:
  685. move.l save_vecteur_irq,$6c
  686. move.w #$7fff,$dff09a
  687. move.w save_intena,$dff09a
  688. move.w #$7fff,$dff096
  689. move.w save_dmacon,$dff096
  690. move.l 4,a6
  691. lea name_glib,a1
  692. moveq #0,d0
  693. jsr -552(a6)
  694. move.l d0,a0
  695. move.l 38(a0),$dff080
  696. clr.w $dff088
  697. move.L 4,a6
  698. jsr -138(a6)
  699. rts
  700. save_intena:dc.w 0
  701. save_dmacon:dc.w 0
  702. save_vecteur_irq:dc.l 0
  703. name_glib:dc.b "graphics.library",0
  704. even
  705.  
  706. makecopper:
  707. lea cop1,a0
  708. move.L #$740ffffe,d0
  709. move #111,d6
  710. mcl0:
  711. move.l d0,(a0)+
  712. move.L #$1820000,(a0)+
  713. move.l #$1860000,(a0)+
  714. add.L #$1000000,d0
  715. dbra d6,mcl0
  716.  
  717. lea cop1+6,a0
  718. lea deg,a1
  719. move #6,d6
  720. mcl5:
  721. move (a1)+,d0
  722. move (a1)+,d1
  723. move (a1),d2
  724. move #15,d7
  725. mcl6:
  726. move d0,(a0)
  727. move d0,4(a0)
  728. add.L #12,a0
  729. add d1,d0
  730. dbra d7,mcl6
  731. dbra d6,mcl5
  732. rts
  733.  
  734. mcs1:dc.w 0
  735.  
  736. ;deg:dc.W $f00,$0,$f00,$10,$ff0,-$100,$f0,1,$ff,-$10,$f,$100,$f0f,-1
  737. deg:dc.W 0,1,$f,$10,$ff,$100,$fff,0,$fff,-$100,$ff,-$10,$f,-1
  738.  
  739. copperlist:
  740. dc.L $9683e0
  741. copspr:dc.l $1200000,$1220000,$1240000,$1260000,$1280000,$12a0000
  742. dc.L $12c0000,$12e0000,$1300000,$1320000,$1340000,$1360000
  743. dc.L $1380000,$13a0000,$13c0000,$13e0000
  744. dc.l $1020000,$1080000,$10a0014
  745. prio:dc.L $1040040
  746. dc.l $1800000,$1820fff,$1840888,$1860fff
  747. col3d:dc.L $1920f0f
  748. dc.w    $01a0,$0000 ,$01a2,$099a ,$01a4,$0778 ,$01a6,$0334
  749. dc.w    $01a8,$0000 ,$01aa,$0667 ,$01ac,$0445 ,$01ae,$0223
  750. dc.w    $01b0,$0000 ,$01b2,$0fff ,$01b4,$0aaa ,$01b6,$0666
  751. dc.l $370ffffe,$1800002
  752. dc.l $380ffffe,$1800004
  753. dc.L $390ffffe,$1800007
  754. dc.l $3a0ffffe,$1800004
  755. dc.l $3b0ffffe,$1800002
  756. dc.L $3c0ffffe,$1800000
  757. copbpl1:dc.l $e00000,$e20000,$e80000,$ea0000
  758. copbpl2:dc.l $e40000,$e60000
  759. dc.l $3d0ffffe,$1003600
  760. cop1:blk.b 112*12
  761. dc.l $ffdffffe,$1001200
  762. dc.L $190ffffe,$960020,$9683c0,$1000200,$e00004,$e2f800
  763. dc.L $1a20000,$1a40000,$1a60000,$1aa0000,$1ac0000,$1ae0000
  764. dc.l $1b20000,$1b40000,$1b60000
  765. dc.l $1b0ffffe,$1001200,$1820fff
  766. dc.l $1c0ffffe,$1800002,$1820eee
  767. dc.l $1d0ffffe,$1800004,$1820ddd
  768. dc.L $1e0ffffe,$1800007,$1820ccc
  769. dc.l $1f0ffffe,$1800004,$1820bbb
  770. dc.l $200ffffe,$1800002,$1000200
  771. dc.L $210ffffe,$1800000
  772. dc.L -2
  773.  
  774. bpa:dc.l bp1
  775. bpw:dc.L bp2
  776.  
  777. ***************************************************************
  778. **  Amiga FUTURE COMPOSER V1.0 / 1.2 / 1.3   Replay routine  **
  779. ***************************************************************
  780.  
  781. END_MUSIC:
  782. ;clr.w onoff
  783. clr.l $dff0a6
  784. clr.l $dff0b6
  785. clr.l $dff0c6
  786. clr.l $dff0d6
  787. move.w #$000f,$dff096
  788. rts
  789.  
  790. INIT_MUSIC:
  791. ;move.w #1,onoff
  792. lea MODULE(pc),a0
  793. lea 100(a0),a1
  794. lea    SEQpoint(pc),a5
  795. move.l a1,(a5)
  796. move.l a0,a1
  797. add.l 8(a0),a1
  798. lea    PATpoint(pc),a5
  799. move.l a1,(a5)
  800. move.l a0,a1
  801. add.l 16(a0),a1
  802. lea    FRQpoint(pc),a5
  803. move.l a1,(a5)
  804. move.l a0,a1
  805. add.l 24(a0),a1
  806. lea    VOLpoint(pc),a5
  807. move.l a1,(a5)
  808. move.l 4(a0),d0
  809. divu #13,d0
  810.  
  811. lea 40(a0),a1
  812. lea SOUNDINFO+4(pc),a2
  813. moveq #10-1,d1
  814. initloop:
  815. move.w (a1)+,(a2)+
  816. move.l (a1)+,(a2)+
  817. addq.w #4,a2
  818. dbf d1,initloop
  819. moveq #0,d2
  820. move.l a0,d1
  821. add.l 32(a0),d1
  822. lea    waveforms(pc),a5
  823. sub.l a5,d1
  824. lea SOUNDINFO(pc),a0
  825. move.l d1,(a0)+
  826. moveq #9-1,d3
  827. initloop1:
  828. move.w (a0),d2
  829. add.l d2,d1
  830. add.l d2,d1
  831. addq.w #6,a0
  832. move.l d1,(a0)+
  833. dbf d3,initloop1
  834.  
  835. move.l SEQpoint(pc),a0
  836. moveq #0,d2
  837. move.b 12(a0),d2        ;Get replay speed
  838. bne.s speedok
  839. move.b #3,d2            ;Set default speed
  840. speedok:
  841. lea    respcnt(pc),a5
  842. move.w d2,(a5)        ;Init repspeed counter
  843. lea    repspd(pc),a5
  844. move.w d2,(a5)
  845. INIT2:
  846. lea    audtemp(pc),a5
  847. clr.w (a5)
  848. move.w #$000f,$dff096        ;Disable audio DMA
  849. move.w #$0780,$dff09a        ;Disable audio IRQ
  850. moveq #0,d7
  851. mulu #13,d0
  852. moveq #4-1,d6            ;Number of soundchannels-1
  853. lea V1data(pc),a0        ;Point to 1st voice data area
  854. lea silent(pc),a1
  855. lea o4a0c8(pc),a2
  856. initloop2:
  857. move.l a1,10(a0)
  858. move.l a1,18(a0)
  859. clr.l 14(a0)
  860. clr.b 45(a0)
  861. clr.b 47(a0)
  862. clr.w 8(a0)
  863. clr.l 48(a0)
  864. move.b #$01,23(a0)
  865. move.b #$01,24(a0)
  866. clr.b 25(a0)
  867. clr.l 26(a0)
  868. clr.w 30(a0)
  869. moveq #$00,d3
  870. move.w (a2)+,d1
  871. move.w (a2)+,d3
  872. divu #$0003,d3
  873. move.b d3,32(a0)
  874. mulu #$0003,d3
  875. andi.l #$00ff,d3
  876. andi.l #$00ff,d1
  877. addi.l #$dff0a0,d1
  878. move.l d1,a6
  879. move.l #$0000,(a6)
  880. move.w #$0100,4(a6)
  881. move.w #$0000,6(a6)
  882. move.w #$0000,8(a6)
  883. move.l d1,60(a0)
  884. clr.w 64(a0)
  885. move.l SEQpoint(pc),(a0)
  886. move.l SEQpoint(pc),52(a0)
  887. add.l d0,52(a0)
  888. add.l d3,52(a0)
  889. add.l d7,(a0)
  890. add.l d3,(a0)
  891. move.w #$000d,6(a0)
  892. move.l (a0),a3
  893. move.b (a3),d1
  894. andi.l #$00ff,d1
  895. lsl.w #6,d1
  896. move.l PATpoint(pc),a4
  897. adda.w d1,a4
  898. move.l a4,34(a0)
  899. clr.l 38(a0)
  900. move.b #$01,33(a0)
  901. move.b #$02,42(a0)
  902. move.b 1(a3),44(a0)
  903. move.b 2(a3),22(a0)
  904. clr.b 43(a0)
  905. clr.b 45(a0)
  906. clr.w 56(a0)
  907. adda.w #$004a,a0    ;Point to next voice's data area
  908. dbf d6,initloop2
  909. rts
  910.  
  911. PLAY:
  912. lea pervol(pc),a6
  913. ;tst.w onoff
  914. ;bne.s music_on
  915. ;rts
  916. music_on:
  917. lea    respcnt(pc),a5
  918. subq.w #1,(a5)            ;Decrease replayspeed counter
  919. bne.s nonewnote
  920. move.w repspd(pc),(a5)        ;Restore replayspeed counter
  921. lea V1data(pc),a0        ;Point to voice1 data area
  922. bsr.L new_note
  923. lea V2data(pc),a0        ;Point to voice2 data area
  924. bsr.L new_note
  925. lea V3data(pc),a0        ;Point to voice3 data area
  926. bsr.L new_note
  927. lea V4data(pc),a0        ;Point to voice4 data area
  928. bsr.L new_note
  929.  
  930. nonewnote:
  931. lea    audtemp(pc),a5
  932. clr.w (a5)
  933. lea V1data(pc),a0
  934. bsr.L effects
  935. move.w d0,(a6)+
  936. move.w d1,(a6)+
  937. lea V2data(pc),a0
  938. bsr.L effects
  939. move.w d0,(a6)+
  940. move.w d1,(a6)+
  941. lea V3data(pc),a0
  942. bsr.L effects
  943. move.w d0,(a6)+
  944. move.w d1,(a6)+
  945. lea V4data(pc),a0
  946. bsr.L effects
  947. move.w d0,(a6)+
  948. move.w d1,(a6)+
  949. lea pervol(pc),a6
  950. move.w audtemp(pc),d0
  951. ori.w #$8000,d0            ;Set/clr bit = 1
  952. move.w d0,-(a7)
  953. moveq #0,d1
  954. move.l start1(pc),d2        ;Get samplepointers
  955. move.w offset1(pc),d1        ;Get offset
  956. add.l d1,d2            ;Add offset
  957. move.l start2(pc),d3
  958. move.w offset2(pc),d1
  959. add.l d1,d3
  960. move.l start3(pc),d4
  961. move.w offset3(pc),d1
  962. add.l d1,d4
  963. move.l start4(pc),d5
  964. move.w offset4(pc),d1
  965. add.l d1,d5
  966. move.w ssize1(pc),d0        ;Get sound lengths
  967. move.w ssize2(pc),d1
  968. move.w ssize3(pc),d6
  969. move.w ssize4(pc),d7
  970. move.w (a7)+,$dff096        ;Enable audio DMA
  971. chan1:
  972. lea V1data(pc),a0
  973. tst.w 72(a0)
  974. beq.l chan2
  975. subq.w #1,72(a0)
  976. cmpi.w #1,72(a0)
  977. bne.s chan2
  978. clr.w 72(a0)
  979. move.l d2,$dff0a0        ;Set soundstart
  980. move.w d0,$dff0a4        ;Set soundlength
  981. chan2:
  982. lea V2data(pc),a0
  983. tst.w 72(a0)
  984. beq.s chan3
  985. subq.w #1,72(a0)
  986. cmpi.w #1,72(a0)
  987. bne.s chan3
  988. clr.w 72(a0)
  989. move.l d3,$dff0b0
  990. move.w d1,$dff0b4
  991. chan3:
  992. lea V3data(pc),a0
  993. tst.w 72(a0)
  994. beq.s chan4
  995. subq.w #1,72(a0)
  996. cmpi.w #1,72(a0)
  997. bne.s chan4
  998. clr.w 72(a0)
  999. move.l d4,$dff0c0
  1000. move.w d6,$dff0c4
  1001. chan4:
  1002. lea V4data(pc),a0
  1003. tst.w 72(a0)
  1004. beq.s setpervol
  1005. subq.w #1,72(a0)
  1006. cmpi.w #1,72(a0)
  1007. bne.s setpervol
  1008. clr.w 72(a0)
  1009. move.l d5,$dff0d0
  1010. move.w d7,$dff0d4
  1011. setpervol:
  1012. lea $dff0a6,a5
  1013. move.w (a6)+,(a5)    ;Set period
  1014. move.w (a6)+,2(a5)    ;Set volume
  1015. move.w (a6)+,16(a5)
  1016. move.w (a6)+,18(a5)
  1017. move.w (a6)+,32(a5)
  1018. move.w (a6)+,34(a5)
  1019. move.w (a6)+,48(a5)
  1020. move.w (a6)+,50(a5)
  1021. rts
  1022.  
  1023. NEW_NOTE:
  1024. moveq #0,d5
  1025. move.l 34(a0),a1
  1026. adda.w 40(a0),a1
  1027. cmp.w #64,40(a0)
  1028. bne.s samepat
  1029. move.l (a0),a2
  1030. adda.w 6(a0),a2        ;Point to next sequence row
  1031. cmpa.l 52(a0),a2    ;Is it the end?
  1032. bne.s notend
  1033. move.w d5,6(a0)        ;yes!
  1034. move.l (a0),a2        ;Point to first sequence
  1035. notend:
  1036. moveq #0,d1
  1037. lea    spdtemp(pc),a5
  1038. addq.b #1,(a5)
  1039. cmpi.b #4,(a5)
  1040. bne.s nonewspd
  1041. move.b d5,(a5)
  1042. move.b -1(a1),d1    ;Get new replay speed
  1043. beq.s nonewspd
  1044. lea    respcnt(pc),a5
  1045. move.w d1,(a5)        ;store in counter
  1046. lea    repspd(pc),a5
  1047. move.w d1,(a5)
  1048. nonewspd:
  1049. move.b (a2),d1        ;Pattern to play
  1050. move.b 1(a2),44(a0)    ;Transpose value
  1051. move.b 2(a2),22(a0)    ;Soundtranspose value
  1052.  
  1053. move.w d5,40(a0)
  1054. lsl.w #6,d1
  1055. add.l PATpoint(pc),d1    ;Get pattern pointer
  1056. move.l d1,34(a0)
  1057. addi.w #$000d,6(a0)
  1058. move.l d1,a1
  1059. samepat:
  1060. move.b 1(a1),d1        ;Get info byte
  1061. move.b (a1)+,d0        ;Get note
  1062. bne.s ww1
  1063. andi.w #%11000000,d1
  1064. beq.s noport
  1065. bra.s ww11
  1066. ww1:
  1067. move.w d5,56(a0)
  1068. ww11:
  1069. move.b d5,47(a0)
  1070. move.b (a1),31(a0)
  1071.  
  1072.         ;31(a0) = PORTAMENTO/INSTR. info
  1073.             ;Bit 7 = portamento on
  1074.             ;Bit 6 = portamento off
  1075.             ;Bit 5-0 = instrument number
  1076.         ;47(a0) = portamento value
  1077.             ;Bit 7-5 = always zero
  1078.             ;Bit 4 = up/down
  1079.             ;Bit 3-0 = value
  1080. t_porton:
  1081. btst #7,d1
  1082. beq.s noport
  1083. move.b 2(a1),47(a0)    
  1084. noport:
  1085. andi.w #$007f,d0
  1086. beq.s nextnote
  1087. move.b d0,8(a0)
  1088. move.b (a1),9(a0)
  1089. move.b 32(a0),d2
  1090. moveq #0,d3
  1091. bset d2,d3
  1092. lea    audtemp(pc),a5
  1093. or.w d3,(a5)
  1094. move.w d3,$dff096
  1095. move.b (a1),d1
  1096. andi.w #$003f,d1    ;Max 64 instruments
  1097. add.b 22(a0),d1
  1098. move.l VOLpoint(pc),a2
  1099. lsl.w #6,d1
  1100. adda.w d1,a2
  1101. move.w d5,16(a0)
  1102. move.b (a2),23(a0)
  1103. move.b (a2)+,24(a0)
  1104. move.b (a2)+,d1
  1105. andi.w #$00ff,d1
  1106. move.b (a2)+,27(a0)
  1107. move.b #$40,46(a0)
  1108. move.b (a2)+,d0
  1109. move.b d0,28(a0)
  1110. move.b d0,29(a0)
  1111. move.b (a2)+,30(a0)
  1112. move.l a2,10(a0)
  1113. move.l FRQpoint(pc),a2
  1114. lsl.w #6,d1
  1115. adda.w d1,a2
  1116. move.l a2,18(a0)
  1117. move.w d5,50(a0)
  1118. move.b d5,26(a0)
  1119. move.b d5,25(a0)
  1120. nextnote:
  1121. addq.w #2,40(a0)
  1122. rts
  1123.  
  1124. EFFECTS:
  1125. moveq #0,d7
  1126. testsustain:
  1127. tst.b 26(a0)        ;Is sustain counter = 0
  1128. beq.s sustzero
  1129. subq.b #1,26(a0)    ;if no, decrease counter
  1130. bra.L VOLUfx
  1131. sustzero:        ;Next part of effect sequence
  1132. move.l 18(a0),a1    ;can be executed now.
  1133. adda.w 50(a0),a1
  1134. testeffects:
  1135. cmpi.b #$e1,(a1)    ;E1 = end of FREQseq sequence
  1136. beq.L VOLUfx
  1137. cmpi.b #$e0,(a1)    ;E0 = loop to other part of sequence
  1138. bne.s testnewsound
  1139. move.b 1(a1),d0        ;loop to start of sequence + 1(a1)
  1140. andi.w #$003f,d0
  1141. move.w d0,50(a0)
  1142. move.l 18(a0),a1
  1143. adda.w d0,a1
  1144. testnewsound:
  1145. cmpi.b #$e2,(a1)    ;E2 = set waveform
  1146. bne.s o49c64
  1147. moveq #0,d0
  1148. moveq #0,d1
  1149. move.b 32(a0),d1
  1150. bset d1,d0
  1151. lea    audtemp(pc),a5
  1152. or.w d0,(a5)
  1153. move.w d0,$dff096
  1154. move.b 1(a1),d0
  1155. andi.w #$00ff,d0
  1156. lea SOUNDINFO(pc),a4
  1157. add.w d0,d0
  1158. move.w d0,d1
  1159. add.w d1,d1
  1160. add.w d1,d1
  1161. add.w d1,d0
  1162. adda.w d0,a4
  1163. move.l 60(a0),a3
  1164. move.l (a4),d1
  1165. lea    waveforms(pc),a5
  1166. add.l a5,d1
  1167. move.l d1,(a3)
  1168. move.l d1,68(a0)
  1169. move.w 4(a4),4(a3)
  1170. move.l 6(a4),64(a0)
  1171. swap d1
  1172. move.w #$0003,72(a0)
  1173. tst.w d1
  1174. bne.s o49c52
  1175. move.w #$0002,72(a0)
  1176. o49c52:
  1177. clr.w 16(a0)
  1178. move.b #$01,23(a0)
  1179. addq.w #2,50(a0)
  1180. bra.L o49d02
  1181. o49c64:
  1182. cmpi.b #$e4,(a1)
  1183. bne.s testpatjmp
  1184. move.b 1(a1),d0
  1185. andi.w #$00ff,d0
  1186. lea SOUNDINFO(pc),a4
  1187. add.w d0,d0
  1188. move.w d0,d1
  1189. add.w d1,d1
  1190. add.w d1,d1
  1191. add.w d1,d0
  1192. adda.w d0,a4
  1193. move.l 60(a0),a3
  1194. move.l (a4),d1
  1195. lea    waveforms(pc),a5
  1196. add.l a5,d1
  1197. move.l d1,(a3)
  1198. move.l d1,68(a0)
  1199. move.w 4(a4),4(a3)
  1200. move.l 6(a4),64(a0)
  1201.  
  1202. swap d1
  1203. move.w #$0003,72(a0)
  1204. tst.w d1
  1205. bne.s o49cae
  1206. move.w #$0002,72(a0)
  1207. o49cae:
  1208. addq.w #2,50(a0)
  1209. bra.s o49d02
  1210. testpatjmp:
  1211. cmpi.b #$e7,(a1)
  1212. bne.s testnewsustain
  1213. move.b 1(a1),d0
  1214. andi.w #$00ff,d0
  1215. lsl.w #6,d0
  1216. move.l FRQpoint(pc),a1
  1217. adda.w d0,a1
  1218. move.l a1,18(a0)
  1219. move.w d7,50(a0)
  1220. bra.L testeffects
  1221. testnewsustain:
  1222. cmpi.b #$e8,(a1)    ;E8 = set sustain time
  1223. bne.s o49cea
  1224. move.b 1(a1),26(a0)
  1225. addq.w #2,50(a0)
  1226. bra.L testsustain
  1227. o49cea:
  1228. cmpi.b #$e3,(a1)
  1229. bne.s o49d02
  1230. addq.w #3,50(a0)
  1231. move.b 1(a1),27(a0)
  1232. move.b 2(a1),28(a0)
  1233. o49d02:
  1234. move.l 18(a0),a1
  1235. adda.w 50(a0),a1
  1236. move.b (a1),43(a0)
  1237. addq.w #1,50(a0)
  1238. VOLUfx:
  1239. tst.b 25(a0)
  1240. beq.s o49d1e
  1241. subq.b #1,25(a0)
  1242. bra.s o49d70
  1243. o49d1e:
  1244. subq.b #1,23(a0)
  1245. bne.s o49d70
  1246. move.b 24(a0),23(a0)
  1247. o49d2a:
  1248. move.l 10(a0),a1
  1249. adda.w 16(a0),a1
  1250. move.b (a1),d0
  1251. cmpi.b #$e8,d0
  1252. bne.s o49d4a
  1253. addq.w #2,16(a0)
  1254. move.b 1(a1),25(a0)
  1255. bra.s VOLUfx
  1256. o49d4a:
  1257. cmpi.b #$e1,d0
  1258. beq.s o49d70
  1259. cmpi.b #$e0,d0
  1260. bne.s o49d68
  1261. move.b 1(a1),d0
  1262. andi.l #$003f,d0
  1263. subq.b #5,d0
  1264. move.w d0,16(a0)
  1265. bra.s o49d2a
  1266. o49d68:
  1267. move.b (a1),45(a0)
  1268. addq.w #1,16(a0)
  1269. o49d70:
  1270. move.b 43(a0),d0
  1271. bmi.s o49d7e
  1272. add.b 8(a0),d0
  1273. add.b 44(a0),d0
  1274. o49d7e:
  1275. andi.w #$007f,d0
  1276. lea PERIODS(pc),a1
  1277. add.w d0,d0
  1278. move.w d0,d1
  1279. adda.w d0,a1
  1280. move.w (a1),d0
  1281. move.b 46(a0),d7
  1282. tst.b 30(a0)
  1283. beq.s o49d9e
  1284. subq.b #1,30(a0)
  1285.  
  1286. bra.s o49df4
  1287. o49d9e:
  1288. move.b d1,d5
  1289. move.b 28(a0),d4
  1290. add.b d4,d4
  1291. move.b 29(a0),d1
  1292. tst.b d7
  1293. bpl.s o49db4
  1294. btst #0,d7
  1295. bne.s o49dda
  1296. o49db4:
  1297. btst #5,d7
  1298. bne.s o49dc8
  1299. sub.b 27(a0),d1
  1300. bcc.s o49dd6
  1301. bset #5,d7
  1302. moveq #0,d1
  1303. bra.s o49dd6
  1304. o49dc8:
  1305. add.b 27(a0),d1
  1306. cmp.b d4,d1
  1307. bcs.s o49dd6
  1308. bclr #5,d7
  1309. move.b d4,d1
  1310. o49dd6:
  1311. move.b d1,29(a0)
  1312. o49dda:
  1313. lsr.b #1,d4
  1314. sub.b d4,d1
  1315. bcc.s o49de4
  1316. subi.w #$0100,d1
  1317. o49de4:
  1318. addi.b #$a0,d5
  1319. bcs.s o49df2
  1320. o49dea:
  1321. add.w d1,d1
  1322. addi.b #$18,d5
  1323. bcc.s o49dea
  1324. o49df2:
  1325. add.w d1,d0
  1326. o49df4:
  1327. eori.b #$01,d7
  1328. move.b d7,46(a0)
  1329.  
  1330. ; DO THE PORTAMENTO THING
  1331. moveq #0,d1
  1332. move.b 47(a0),d1    ;get portavalue
  1333. beq.s a56d0        ;0=no portamento
  1334. cmpi.b #$1f,d1
  1335. bls.s portaup
  1336. portadown: 
  1337. andi.w #$1f,d1
  1338. neg.w d1
  1339. portaup:
  1340. sub.w d1,56(a0)
  1341. a56d0:
  1342. add.w 56(a0),d0
  1343. o49e3e:
  1344. cmpi.w #$0070,d0
  1345. bhi.s nn1
  1346. move.w #$0071,d0
  1347. nn1:
  1348. cmpi.w #$06b0,d0
  1349. bls.s nn2
  1350. move.w #$06b0,d0
  1351. nn2:
  1352. moveq #0,d1
  1353. move.b 45(a0),d1
  1354. rts
  1355.  
  1356. pervol: blk.b 16,0    ;Periods & Volumes temp. store
  1357. respcnt: dc.w 0        ;Replay speed counter 
  1358. repspd:  dc.w 0        ;Replay speed counter temp
  1359. firseq:     dc.w 0        ;First sequence
  1360. lasseq:     dc.w 0        ;Last sequence
  1361. audtemp: dc.w 0
  1362. spdtemp: dc.w 0
  1363.  
  1364. V1data:  blk.b 64,0    ;Voice 1 data area
  1365. offset1: blk.b 02,0    ;Is added to start of sound
  1366. ssize1:  blk.b 02,0    ;Length of sound
  1367. start1:  blk.b 06,0    ;Start of sound
  1368.  
  1369. V2data:  blk.b 64,0    ;Voice 2 data area
  1370. offset2: blk.b 02,0
  1371. ssize2:  blk.b 02,0
  1372. start2:  blk.b 06,0
  1373.  
  1374. V3data:  blk.b 64,0    ;Voice 3 data area
  1375. offset3: blk.b 02,0
  1376. ssize3:  blk.b 02,0
  1377. start3:  blk.b 06,0
  1378.  
  1379. V4data:  blk.b 64,0    ;Voice 4 data area
  1380. offset4: blk.b 02,0
  1381. ssize4:  blk.b 02,0
  1382. start4:  blk.b 06,0
  1383.  
  1384. o4a0c8: dc.l $00000000,$00100003,$00200006,$00300009
  1385. SEQpoint: dc.l 0
  1386. PATpoint: dc.l 0
  1387. FRQpoint: dc.l 0
  1388. VOLpoint: dc.l 0
  1389.  
  1390. SILENT: dc.w $0100,$0000,$0000,$00e1
  1391.  
  1392. PERIODS:dc.w $06b0,$0650,$05f4,$05a0,$054c,$0500,$04b8,$0474
  1393.     dc.w $0434,$03f8,$03c0,$038a,$0358,$0328,$02fa,$02d0
  1394.     dc.w $02a6,$0280,$025c,$023a,$021a,$01fc,$01e0,$01c5
  1395.     dc.w $01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d
  1396.     dc.w $010d,$00fe,$00f0,$00e2,$00d6,$00ca,$00be,$00b4
  1397.     dc.w $00aa,$00a0,$0097,$008f,$0087,$007f,$0078,$0071
  1398.     dc.w $0071,$0071,$0071,$0071,$0071,$0071,$0071,$0071
  1399.     dc.w $0071,$0071,$0071,$0071,$0d60,$0ca0,$0be8,$0b40
  1400.     dc.w $0a98,$0a00,$0970,$08e8,$0868,$07f0,$0780,$0714
  1401.     dc.w $1ac0,$1940,$17d0,$1680,$1530,$1400,$12e0,$11d0
  1402.     dc.w $10d0,$0fe0,$0f00,$0e28
  1403.  
  1404. SOUNDINFO:
  1405. ;Offset.l , Sound-length.w , Start-offset.w , Repeat-length.w 
  1406.  
  1407. ;Reserved for samples
  1408.     dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
  1409.     dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
  1410.     dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
  1411.     dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
  1412.     dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
  1413.     dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
  1414.     dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
  1415.     dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
  1416.     dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
  1417.     dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
  1418. ;Reserved for synth sounds
  1419.     dc.w $0000,$0000 ,$0010 ,$0000 ,$0010 
  1420.     dc.w $0000,$0020 ,$0010 ,$0000 ,$0010 
  1421.     dc.w $0000,$0040 ,$0010 ,$0000 ,$0010 
  1422.     dc.w $0000,$0060 ,$0010 ,$0000 ,$0010 
  1423.     dc.w $0000,$0080 ,$0010 ,$0000 ,$0010 
  1424.     dc.w $0000,$00a0 ,$0010 ,$0000 ,$0010 
  1425.     dc.w $0000,$00c0 ,$0010 ,$0000 ,$0010 
  1426.     dc.w $0000,$00e0 ,$0010 ,$0000 ,$0010 
  1427.     dc.w $0000,$0100 ,$0010 ,$0000 ,$0010 
  1428.     dc.w $0000,$0120 ,$0010 ,$0000 ,$0010 
  1429.     dc.w $0000,$0140 ,$0010 ,$0000 ,$0010 
  1430.     dc.w $0000,$0160 ,$0010 ,$0000 ,$0010 
  1431.     dc.w $0000,$0180 ,$0010 ,$0000 ,$0010 
  1432.     dc.w $0000,$01a0 ,$0010 ,$0000 ,$0010 
  1433.     dc.w $0000,$01c0 ,$0010 ,$0000 ,$0010 
  1434.     dc.w $0000,$01e0 ,$0010 ,$0000 ,$0010 
  1435.     dc.w $0000,$0200 ,$0010 ,$0000 ,$0010 
  1436.     dc.w $0000,$0220 ,$0010 ,$0000 ,$0010 
  1437.     dc.w $0000,$0240 ,$0010 ,$0000 ,$0010 
  1438.     dc.w $0000,$0260 ,$0010 ,$0000 ,$0010 
  1439.     dc.w $0000,$0280 ,$0010 ,$0000 ,$0010 
  1440.     dc.w $0000,$02a0 ,$0010 ,$0000 ,$0010 
  1441.     dc.w $0000,$02c0 ,$0010 ,$0000 ,$0010 
  1442.     dc.w $0000,$02e0 ,$0010 ,$0000 ,$0010 
  1443.     dc.w $0000,$0300 ,$0010 ,$0000 ,$0010 
  1444.     dc.w $0000,$0320 ,$0010 ,$0000 ,$0010 
  1445.     dc.w $0000,$0340 ,$0010 ,$0000 ,$0010 
  1446.     dc.w $0000,$0360 ,$0010 ,$0000 ,$0010 
  1447.     dc.w $0000,$0380 ,$0010 ,$0000 ,$0010 
  1448.     dc.w $0000,$03a0 ,$0010 ,$0000 ,$0010 
  1449.     dc.w $0000,$03c0 ,$0010 ,$0000 ,$0010 
  1450.     dc.w $0000,$03e0 ,$0010 ,$0000 ,$0010 
  1451.     dc.w $0000,$0400 ,$0008 ,$0000 ,$0008 
  1452.     dc.w $0000,$0410 ,$0008 ,$0000 ,$0008 
  1453.     dc.w $0000,$0420 ,$0008 ,$0000 ,$0008 
  1454.     dc.w $0000,$0430 ,$0008 ,$0000 ,$0008 
  1455.     dc.w $0000,$0440 ,$0008 ,$0000 ,$0008
  1456.     dc.w $0000,$0450 ,$0008 ,$0000 ,$0008
  1457.     dc.w $0000,$0460 ,$0008 ,$0000 ,$0008
  1458.     dc.w $0000,$0470 ,$0008 ,$0000 ,$0008
  1459.     dc.w $0000,$0480 ,$0010 ,$0000 ,$0010
  1460.     dc.w $0000,$04a0 ,$0008 ,$0000 ,$0008
  1461.     dc.w $0000,$04b0 ,$0010 ,$0000 ,$0010
  1462.     dc.w $0000,$04d0 ,$0010 ,$0000 ,$0010
  1463.     dc.w $0000,$04f0 ,$0008 ,$0000 ,$0008
  1464.     dc.w $0000,$0500 ,$0008 ,$0000 ,$0008
  1465.     dc.w $0000,$0510 ,$0018 ,$0000 ,$0018
  1466.  
  1467. WAVEFORMS:
  1468. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1469. dc.w $3f37,$2f27,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
  1470. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1471. dc.w $c037,$2f27,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
  1472. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1473. dc.w $c0b8,$2f27,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
  1474. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1475. dc.w $c0b8,$b027,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
  1476. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1477. dc.w $c0b8,$b0a8,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
  1478. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1479. dc.w $c0b8,$b0a8,$a017,$0f07,$ff07,$0f17,$1f27,$2f37
  1480. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1481. dc.w $c0b8,$b0a8,$a098,$0f07,$ff07,$0f17,$1f27,$2f37
  1482. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1483. dc.w $c0b8,$b0a8,$a098,$9007,$ff07,$0f17,$1f27,$2f37
  1484. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1485. dc.w $c0b8,$b0a8,$a098,$9088,$ff07,$0f17,$1f27,$2f37
  1486. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1487. dc.w $c0b8,$b0a8,$a098,$9088,$8007,$0f17,$1f27,$2f37
  1488. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1489. dc.w $c0b8,$b0a8,$a098,$9088,$8088,$0f17,$1f27,$2f37
  1490. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1491. dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9017,$1f27,$2f37
  1492. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1493. dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9098,$1f27,$2f37
  1494. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1495. dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9098,$a027,$2f37
  1496. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1497. dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9098,$a0a8,$2f37
  1498. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1499. dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9098,$a0a8,$b037
  1500. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1501. dc.w $7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1502. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1503. dc.w $817f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1504. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1505. dc.w $8181,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1506. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1507. dc.w $8181,$817f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1508. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1509. dc.w $8181,$8181,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1510. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1511. dc.w $8181,$8181,$817f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1512. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1513. dc.w $8181,$8181,$8181,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1514. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1515. dc.w $8181,$8181,$8181,$817f,$7f7f,$7f7f,$7f7f,$7f7f
  1516. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1517. dc.w $8181,$8181,$8181,$8181,$7f7f,$7f7f,$7f7f,$7f7f
  1518. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1519. dc.w $8181,$8181,$8181,$8181,$817f,$7f7f,$7f7f,$7f7f
  1520. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1521. dc.w $8181,$8181,$8181,$8181,$8181,$7f7f,$7f7f,$7f7f
  1522. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1523. dc.w $8181,$8181,$8181,$8181,$8181,$817f,$7f7f,$7f7f
  1524. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1525. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$7f7f,$7f7f
  1526. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1527. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$817f,$7f7f
  1528. dc.w $8080,$8080,$8080,$8080,$8080,$8080,$8080,$8080
  1529. dc.w $8080,$8080,$8080,$8080,$8080,$8080,$8080,$7f7f
  1530. dc.w $8080,$8080,$8080,$8080,$8080,$8080,$8080,$8080
  1531. dc.w $8080,$8080,$8080,$8080,$8080,$8080,$8080,$807f
  1532. dc.w $8080,$8080,$8080,$8080,$7f7f,$7f7f,$7f7f,$7f7f
  1533. dc.w $8080,$8080,$8080,$807f,$7f7f,$7f7f,$7f7f,$7f7f
  1534. dc.w $8080,$8080,$8080,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1535. dc.w $8080,$8080,$807f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1536. dc.w $8080,$8080,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1537. dc.w $8080,$807f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1538. dc.w $8080,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1539. dc.w $8080,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1540. dc.w $8080,$9098,$a0a8,$b0b8,$c0c8,$d0d8,$e0e8,$f0f8
  1541. dc.w $0008,$1018,$2028,$3038,$4048,$5058,$6068,$707f
  1542. dc.w $8080,$a0b0,$c0d0,$e0f0,$0010,$2030,$4050,$6070
  1543. dc.w $4545,$797d,$7a77,$7066,$6158,$534d,$2c20,$1812
  1544. dc.w $04db,$d3cd,$c6bc,$b5ae,$a8a3,$9d99,$938e,$8b8a
  1545. dc.w $4545,$797d,$7a77,$7066,$5b4b,$4337,$2c20,$1812
  1546. dc.w $04f8,$e8db,$cfc6,$beb0,$a8a4,$9e9a,$9594,$8d83
  1547. dc.w $0000,$4060,$7f60,$4020,$00e0,$c0a0,$80a0,$c0e0
  1548. dc.w $0000,$4060,$7f60,$4020,$00e0,$c0a0,$80a0,$c0e0
  1549. dc.w $8080,$9098,$a0a8,$b0b8,$c0c8,$d0d8,$e0e8,$f0f8
  1550. dc.w $0008,$1018,$2028,$3038,$4048,$5058,$6068,$707f
  1551. dc.w $8080,$a0b0,$c0d0,$e0f0,$0010,$2030,$4050,$6070
  1552.  
  1553. MODULE:        ;*** juste changer le nom 
  1554. incbin "mod.tristar"
  1555.  
  1556.  
  1557. sinus:blk.b 4096,0
  1558. sinusf:
  1559. setf:blk.b 4,0
  1560. set:
  1561. incbin "set1"
  1562. set1=set
  1563. set2=set1+256
  1564. set3=set2+256
  1565. set4=set3+$b0
  1566. set5=set4+$b0
  1567. set6=set5+$80
  1568. blk.b $80
  1569. sin:
  1570. incbin "sincos"
  1571. cos=sin+$200
  1572. vide:blk.b 32,0
  1573.  
  1574. end:
  1575. coord:
  1576.  
  1577. bp3=$57000
  1578. bp4=bp3+17920
  1579. bpd=bp4+17920
  1580.  
  1581. size1=112*44
  1582. size2=2420
  1583. scroll=$50000
  1584. bp1=scroll+746+size2
  1585. bp2=bp1+4928+88+size2+size2
  1586.